package com.cskaoyan.shopping.remote;

import com.cskaoyan.mall.api.CartService;
import com.cskaoyan.mall.constant.ShoppingRetCode;
import com.cskaoyan.mall.dto.ClearCartItemRequest;
import com.cskaoyan.mall.dto.ClearCartItemResponse;
import com.cskaoyan.shopping.dto.*;
import com.cskaoyan.shopping.service.ICartService;
import com.cskaoyan.shopping.utils.ExceptionProcessorUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * 给创建订单调用的实现类
 * 创建日期: 2022/04/23 17:46
 */

@Slf4j
@RestController
public class CartServiceImpl implements CartService {

    @Autowired
    ICartService iCartService;



    /**
     * 给创建订单调用的方法：创建订单最后一步，删除对应的购物车记录
     * 创建日期：2022/04/23 17:47
     * @param  request 包含用户id和商品id列表
     * @return com.cskaoyan.mall.dto.ClearCartItemResponse
     * @author ChengWenqi
     */
    @Override
    public ClearCartItemResponse clearCartItemByUserID(ClearCartItemRequest request) {
        ClearCartItemResponse response = new ClearCartItemResponse();

        try {
            // 参数校验
            request.requestCheck();

            // 获取用户id和订单商品列表
            Long userId = request.getUserId();
            Map<Long, Long> productMap = request.getProductIdAndNum();

            // 获取购物车列表
            List<CartProductDto> cartList = iCartService.getCartListById(new CartListByIdRequest(userId)).getCartProductDtos();
            // 遍历购物车列表
            if (!CollectionUtils.isEmpty(cartList)) {
                for (CartProductDto cartProductDto : cartList) {
                    Long productId = cartProductDto.getProductId();
                    // 订单中包含当前遍历到的购物车商品
                    if (productMap.containsKey(productId)) {
                        // 针对当前商品，新数量 = 购物车原数量 - 购买数量
                        Long newCartNum = cartProductDto.getProductNum() - productMap.get(productId);
                        if (newCartNum <= 0) {
                            // 如果 购物车数量 <= 购买数量，直接在购物车中删除该商品
                            iCartService.deleteCartItem(new DeleteCartItemRequest(userId, productId));
                        }
                    }
                }
            }
            // 如果购物车列表是空的，啥都不用做
            // 设置成功响应码和响应信息
            response.setCode(ShoppingRetCode.SUCCESS.getCode());
            response.setMsg(ShoppingRetCode.SUCCESS.getMessage());
        } catch (Exception e) {
            log.error("CartServiceImpl.clearCartItemByUserID occur Exception: " + e);
            ExceptionProcessorUtils.wrapperHandlerException(response,e);
        }

        return response;
    }


}
